<template>
  <div v-if="detailInfo.nm">
    <div>这是详情页面 - {{ id }} - {{ detailInfo.nm }}</div>
    <img :src="detailInfo.img | formaturl" alt="" />
    <button @click="guess">猜你喜欢 - 除暴</button>
  </div>
</template>

<script>
import { mapActions, mapState } from "vuex";
export default {
  props: ["id"],
  // computed: mapState(["detailInfo"]),
  computed: mapState({
    detailInfo: (state) => state.detail.detailInfo,
  }),
  mounted() {
    this.getDetailInfoAsync({ id: this.id });
  },
  methods: {
    ...mapActions("detail", ["getDetailInfoAsync"]),
    guess() {
      this.$router.push("/detail/1240838");
    },
  },
  watch: {
    $route(to) {
      this.getDetailInfoAsync(to.params.id);
    },
  },
  filters: {
    formaturl(val) {
      return val.split("/w.h").join("");
    },
  },

  // 组件内守卫（路由给我们提供的生命周期）
  // async beforeRouteEnter(to, from, next) {
  // 在渲染该组件的对应路由被 confirm 前调用
  // 不！能！获取组件实例 `this`
  // 因为当守卫执行前，组件实例还没被创建
  // console.log("beforeRouteEnter");

  // const res = await detailApi({ id: to.params.id });
  // next里面可以传入一个回调函数，在next的时候做，可以使用vm的形参表示组件的this
  //   next((vm) => {
  //     vm.detailInfo = res.result;
  //   });
  // },
  // async beforeRouteUpdate(to, from, next) {
  // 在当前路由改变，但是该组件被复用时调用
  // 举例来说，对于一个带有动态参数的路径 /foo/:id，在 /foo/1 和 /foo/2 之间跳转的时候，
  // 由于会渲染同样的 Foo 组件，因此组件实例会被复用。而这个钩子就会在这个情况下被调用。
  // 可以访问组件实例 `this`
  // console.log("beforeRouteUpdate");
  //   const res = await detailApi({ id: to.params.id });
  //   this.detailInfo = res.result;
  //   next();
  // },
  // beforeRouteLeave(to, from, next) {
  // 导航离开该组件的对应路由时调用
  // 可以访问组件实例 `this`
  // console.log("beforeRouteLeave");
  // 很少使用, 更多使用beforeDestroy()
  //   next();
  // },
};
</script>

<style lang="less" scoped>
img {
  width: 200px;
  height: 300px;
}
</style>
